Component({
  externalClasses: ['w-class'],
  properties: {
    // 红点模式
    dot: {
      type: Boolean,
      value: false
    },
    //角标形状
    shape: {
      type: String,
      value: 'horn',
      options: ['horn', 'circle']
    },
    //角标里的内容
    value: {
      type: String,
      value: '0'
    },
    //角标内容模式：数字和文本
    mode: {
      type: String,
      value: 'number',
      options: ['number', 'text']
    },
    // 数字最大值
    maxCount: {
      type: Number,
      value: 99
    },
    // 数字形式
    // overflow：超过max-count会显示为${max-count}+。通过max-count属性修改数字最大值，max-count默认值为99。
    // ellipsis：超过max-count会显示为...。通过max-count属性修改数字最大值，max-count默认值为99。
    // limit：数字大于1000小于10000显示k为单位，大于10000显示w为单位。
    numberType: {
      type: String,
      value: 'overflow',
      options: ['overflow', 'limit', 'ellipsis']
    },
    //是否显示角标
    show: {
      type: Boolean,
      value: true
    },
  },
  data: {
    finalCount: 0
  },
  observers: {
    'value': function () {
      this.finalCount();
    }
  },
  methods: {
    // 最终数字
    finalCount() {
      if (isNaN(Number(this.data.value)) || (this.data.mode === 'text')) {
        this.setData({
          finalCount: this.data.value
        });
      } else {
        this.switchType();
      }
    },
    switchType() {
      switch (this.data.numberType) {
        case 'overflow':
          this.setData({
            finalCount: Number(this.data.value) > Number(this.data.maxCount) ? `${this.data.maxCount}+` : this.data.value
          });
          break;
        case 'ellipsis':
          this.setData({
            finalCount: Number(this.data.value) > Number(this.data.maxCount) ? '...' : this.data.value
          });
          break;
        case 'limit':
          this.setData({
            finalCount: Number(this.data.value) > 999 ? (Number(this.data.value) >= 9999 ? Math.floor(this.data.value / 10000 * 100) / 100 + 'w' : Math.floor(this.data.value / 1000 * 100) / 100 + 'k') : this.data.value
          });
          break;
        default:
          this.setData({
            finalCount: Number(this.data.value)
          });
          break;
      }
    },
    // 点击事件
    onTap() {
      this.triggerEvent('onTap', {});
    },
  }
});